// app.js

const express = require('express');
const cors = require('cors');
const joi = require('joi');
const { expressjwt } = require('express-jwt');
const config = require('./config');

const app = express();

// —— CORS 白名单 & 动态配置 —— //
const whitelist = [
  'http://localhost:5173',
  'http://127.0.0.1:5173',
  'http://192.168.1.9:5173',
  'http://120.26.126.23'
];
app.use(cors({
  origin: (origin, callback) => {
    // Postman 等无 origin 的请求也放行
    if (!origin || whitelist.includes(origin)) {
      callback(null, origin || true);
    } else {
      callback(new Error('Not allowed by CORS'));
    }
  },
  credentials: true,              // 允许携带凭证（cookies、Authorization header）
  methods: ['GET', 'POST', 'PUT', 'DELETE', 'OPTIONS'],
  allowedHeaders: ['Content-Type', 'Authorization']
}));

app.use(express.json()); // 解析 application/json 格式的请求体
app.use(express.urlencoded({ extended: false }));// 解析 application/x-www-form-urlencoded

// 自定义 res.cc 工具
app.use((req, res, next) => {
  res.cc = (err, code = 200) => {
    res.send({
      code,
      message: err instanceof Error ? err.message : err
    });
  };
  next();
});

// JWT 解析（除了 /api/login 之类无需认证的路径）
// 注意：这里的 unless path 要根据你的具体接口前缀来写
app.use(expressjwt({
  secret: config.jwtSecretKey,
  algorithms: ['HS256']
}).unless({
  path: [/^\/api/]
  /*  path: [
     /^\/api\/login/,    // 放行登录
     /^\/api\/register/  // 如果有注册接口也可以放行
   ] */
}));

// 路由
const userRouter = require('./router/user');
const roomRouter = require('./router/room');
app.use('/api', userRouter);
app.use(roomRouter);

// 全局错误处理
app.use((err, req, res, next) => {
  if (err instanceof joi.ValidationError) return res.cc(err);
  if (err.name === 'UnauthorizedError') return res.cc('身份认证失败', 401);
  res.cc(err);
});

app.listen(3007, () => {
  console.log('api server http://127.0.0.1:3007');
});
